Machines virtuelles QEMU/KVM - Dossiers partagés

KVM Partage Fichiers

1 Objectif

2 Mise en place

2.1 Configuration 1

2.1.1 Fedora

2.1.1.1 VM Windows

2.1.1.2 VM supportant sshfs ou sftp

2.1.2 Machine virtuelle

2.1.2.1 VM windows

2.1.2.2 VM supportant ssh

2.2 Configuration 2

2.2.1 Test depuis l'hyperviseur

2.2.2 SELinux

2.3 Accès depuis la machine virtuelle

Dossier partagé dans KVM (Synthèse)

 

KVM Partage Fichiers

1 Objectif

Le but de ce tutoriel est de monter un dossier partagé entre un hyperviseur et une machine virtuelle déployée grâce à KVM.

Deux possibilités sont documentés ici :

  1. 1.Sans modification sur l'hyperviseur et installation d'un programme sur la machine virtuelle si c'est un OS Windows.  

  2. 2.Avec installation d'un serveur samba sur l'hyperviseur et sans modification sur la machine virtuelle si c'est un OS Windows. 

VM sera un raccourci pour machine virtuelle.
Fedora sera l'hyperviseur.

2 Mise en place

On récupère l'IP de Fedora vue par la VM :

$ ip a show virbr0

virbr0 est le pont réseau virtuel linux créé par libvirt. Il est par défaut configuré en 192.168.122.1 en utilisant dnsmask (voir fichier /etc/libvirt/qemu/networks/default.xml).

3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000

   link/ether 52:54:00:9b:3b:8f brd ff:ff:ff:ff:ff:ff

   inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

      valid_lft forever preferred_lft forever

2.1 Configuration 1

2.1.1 Fedora

Il faut s'assurer que le service sshd est actif :

$ systemctl status sshd.service | grep 'active'

    Active: active (running) since Tue 2020-09-08 21:50:27 EEST; 4 days ago

S'il est inactif, le retour sera :

Active: inactive (dead)

Il faudra donc le démarrer, et l'activer afin de le rendre permanent :

# systemctl start sshd.service

# systemctl enable sshd.service

2.1.1.1 VM Windows

On utilisera le client cifs/smb pour la joindre, cela suppose qu'il y a au moins un dossier partagé sur la VM.

La plupart des navigateurs de fichiers de Fedora supporte le protocole, on peut donc faire un raccourci avec une commande du genre :
smb://utilisateur@adresse_ip_VM/dossier_partagé/.

2.1.1.2 VM supportant sshfs ou sftp

On préférera ces protocoles car plus sécurisés.
sftp étant un accès ftp au travers de ssh.
sshfs permettant de monter le dossier distant dans l'architecture locale.

2.1.2 Machine virtuelle

2.1.2.1 VM windows

Windows n'utilisant pas de façon native les protocoles ssh, on installera winscp qui est la version Windows de sftp. Son utilisation ne pose pas de problème.
Il existe aussi sshfs-win qui demande un peu plus de compétences.

2.1.2.2 VM supportant ssh

Pour avoir accès à tous les fichiers de l'utilisateur, on fera un montage sshfs pour avoir un montage sur local ou alors sftp dans un navigateur de fichiers sous la forme :

sftp://utilisateur@192.168.122.1:/home/utilisateur

2.2 Configuration 2

Elle a été testée avec un hyperviseur sous Fedora 25 et une machine virtuelle Windows 10 sur QEMU/KVM avec une connexion NAT. Dans la mesure où la méthode utilisée est du samba classique sur un réseau tout aussi classique, ce tutoriel peut être appliqué plus largement, avec d'autres solutions de virtualisation et même pour d'autres cas de figure.

La première chose à faire est de s'assurer que le service samba tourne.

# systemctl enable smb.service nmb.service

# systemctl start smb.service nmb.service

Nous créons le dossier partagé avec les droits adéquats. Il est recommandé de ne pas mettre cet emplacement dans /home. Ce dossier est possédé par l'utilisateur nommé partage, que nous créons par la même occasion. Enfin, nous ajoutons l'utilisateur partage à samba. Il convient enfin d'ajouter l'utilisateur qui fera tourner l'hyperviseur au groupe partage, afin qu'il puisse lire et écrire dans le dossier partagé.

# mkdir /VShare

# useradd -m -d /VShare partage

# chown -R partage /VShare

# chmod g+w /VShare

# smbpasswd -a partage

Nous modifions le fichier /etc/samba/smb.conf. Seule la machine virtuelle et l'utilisateur partage auront accès au dossier partagé pour des questions de sécurité.

# vim /etc/samba/smb.conf

[global]

       workgroup = WorkGroup

       netbios name = Host

       server string = serveur %h (Samba %v, Fedora)

       # On souhaite n'autoriser l'accès que via certaines interfaces réseau

       bind interfaces only = Yes

       interfaces = 127.0.0.1, 192.168.122.1

       log file = /var/log/samba/log.%m

       max log size = 100

 

[VShare]

       path = /VShare/

       public = no

       browsable = yes

       valid users = partage

       guest ok = no

       writable = yes

       printable = no

       hide files = /lost+found/

       hide unreadable = yes

       # on force les permissions

       create mask = 666

       force create mode = 666

       security mask = 666

       force security mode = 666

La validité du fichier de configuration peut être testé grâce à la commande testparm.

Il est ensuite nécessaire de redémarrer le service samba. On en profite aussi pour ouvrir les ports liés à samba.

# systemctl restart nmb.service smb.service

# firewall-cmd --add-service=samba

On rendra l'ouverture des ports de samba de façon permanente avec la commande :

# firewall-cmd --add-service=samba --permanent

Pour vérifier que les ports sont bien ouverts, on peut lancer la commande iptables -L -n -v, les ports samba (137/tcp, 138/tcp, 139/tcp et 445/tcp) devraient être listés dans le Chain IN_public_allow.

Il faut enfin rajouter "samba" et "samba-client" en "permanent" dans la zone définie par firewalld.

2.2.1 Test depuis l'hyperviseur

Depuis l'hyperviseur, on lance :

$ smbclient //192.168.122.1/Vshare -U partage

Enter partage's password:

Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.5.2]

smb: \>

2.2.2 SELinux

Si SELinux est actif, il faut lancer les commandes suivantes afin d'éviter les blocages et alertes SELinux :

# semanage fcontext -a -t samba_share_t '/VShare(/.*)?'

# restorecon -R /VShare

Si le dossier partagé n'est pas à la racine mais dans le /home, pensez à rajouter :

# setsebool -P samba_enable_home_dirs on

Pour vérifier, on doit trouver un contexte samba_share_t :

# ls -Z VShare/

-rw-rw-r--. partage partage unconfined_u:object_r:samba_share_t:s0 truc.txt

2.3 Accès depuis la machine virtuelle

L'emplacement partagé est accessible via \\HOST\VShare.

 

Dossier partagé dans KVM (Synthèse)

Création d’un partage entre un hyperviseur KVM et une de ses machines virtuelles

Activation de samba

systemctl enable smb nmb

systemctl start smb nmb

Virbr0 est le bridge linux créé par libvirt lors de son installation, il faut l'identifier

ip a show dev virbr0

SI on veut modifier l'adresse de virbr0

virsh net-edit default

On crée le partage et le compte utilisateur pour s'y connecter

mkdir /partage_vm

useradd -m -d /partage_vm partage

chown -R partage /partage_vm

chmod g+w /partage_vm

smbpasswd -a partage

On declare le partage dans le ficher /etc/samba/smb.conf

[global]

       workgroup = WorkGroup

       netbios name = Host

       server string = serveur %h (Samba %partagevm)

       # On souhaite n'autoriser l'accès que via certaines interfaces réseau

       bind interfaces only = Yes

       interfaces = 127.0.0.1, 192.168.122.1

       log file = /var/log/samba/log.%m

       max log size = 100

 

[partage_vm]

       path = /partage_vm/

       public = no

       browsable = yes

       valid users = partage

       guest ok = no

       writable = yes

       printable = no

       hide files = /lost+found/

       hide unreadable = yes

       # on force les permissions

       create mask = 777

       force create mode = 777

       security mask = 777

       force security mode = 777

On redemarre samba et on ouvre les ports samba

systemctl restart nmb.service smb.service

firewall-cmd --add-service=samba --permanent --add-source=192.168.122.1/24

Test du serveur depuis l'hyperviseur

smbclient //192.168.122.1/partage_vm -U partage

Si SELinux est actif dans un dossier specifique

semanage fcontext -a -t samba_share_t '/partage_vm(/.*)?'

restorecon -R /partage_vm

Si SELinux est dans /home

setsebool -P samba_enable_home_dirs on

Pour vérifier le contexte de SELinux

ls -Z /partage_vm

-rw-rw-r--. partage partage unconfined_u:object_r:samba_share_t:s0 truc.txt

Sur la VM, le dossier est accessible à l’adresse \\ip_de_virbr0\partage_vm